// ISecurityUnitManager.aidl
package com.sgcc.pda.hw;
import com.sgcc.pda.hw.ReturnResult;
import com.sgcc.pda.hw.MeterAuthorityInfo;
import com.sgcc.pda.hw.SecurityUnitRegisterInfo;
// Declare any non-default types here with import statements

interface ICommonUtilManager2 {

    /**
     * 电表进行红外身份认证（使用之前先进行调用meterRegisterAuthInfo注册红外相关权限）
     *
     * @param meterAddress 表地址
     * @param esamType      ESAM类型  01，操作员ESAM；02业务ESAM
     * @param randomLength  随机数长度  4，8，16
     * @param keyType      密钥类型 00公钥 01私钥
     * @param operator     操作员编号
     * @param infraAuth    电能表红外权限
     * @param idAuth       电能表身份认证权限
     * @param mode         通讯方式：0 红外  1 串口(485线)
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:   size==0
     * :List<String> datas(code==其他):
     * 0：失败的描述
     */
    ReturnResult infraIdentity(String meterAddress,String esamType,String randomLength,String keyType,String operator,in MeterAuthorityInfo infraAuth,in MeterAuthorityInfo idAuth,int mode);

    /**
     * 电表进行远程身份认证
     *
     * @param meterAddress 表地址
     * @param keyType      密钥类型 00公钥 01私钥
     * @param mode         通讯方式：0 红外  1 串口(485线)
     * @return ReturnResult  :int code  0 成功  其他失败
     *                      :List<String> datas（code==0）:   size==0
     *                                  0:rand2 执行远程身份认证之后获取的电表随机数2
     *                                  1:esamNo 执行身份认证之后获取的电表ESAM编号
     *                    :List<String> datas(code==其他):
     *                                  0：失败的描述
     */
    ReturnResult remoteIdentity(String meterAddress,String keyType,String operator,in MeterAuthorityInfo idAuth,int mode);

    /**
     * 698电表建立连接（秘钥协商）
     *
     * @param meterAddress 表地址
     * @param idAuth 身份认证权限
     * @param mode         通讯方式：0 红外  1 串口(485线)
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:   size==0
     * :List<String> datas(code==其他):
     * 0：失败的描述
     */
     ReturnResult makeConnection698(String meterAddress, in MeterAuthorityInfo idAuth, int mode,boolean checkDar);

     /**
      * 698电表建立连接（秘钥协商）
      *
      * @param meterAddress 表地址
      * @param taskData 要发送的数据
      * @param safeType 安全类型
      * @param mode         通讯方式：0 红外  1 串口(485线)
      * @return ReturnResult  :int code  0 成功  其他失败
      * :List<String> datas（code==0）:   size==0
      * 0:linkUserData 链路数据域
      * :List<String> datas(code==其他):
      * 0：失败的描述
      */
     ReturnResult sendData698(String meterAddress, String taskData,String safeType,int mode,boolean checkDar);

     /**
      * 698安全传输记录型报文(针对冻结类数据)
      *
      * @param meterAddress 表地址
      * @param taskData 要发送的数据
      * @param safeType 安全类型
      * @param mode         通讯方式：0 红外  1 串口(485线)
      * @return ReturnResult  :int code  0 成功  其他失败
      * :List<String> datas（code==0）:   size==0
      * 0:linkUserData 链路数据域
      * :List<String> datas(code==其他):
      * 0：失败的描述
      */
     ReturnResult sendRecordData698(String meterAddress, String taskData,String safeType,int mode,boolean checkDar);

    /**
     * 698红外认证
     * @param keyType   密钥类型 00公钥 01私钥
     * @param meterAddress    通信地址
     * @param infraAuth  红外权限
     * @param idAuth   身份认证权限
     * @param mode   通讯方式：0 红外  1 串口(485线)
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:   size==0
     * 0:linkUserData 链路数据域
     * :List<String> datas(code==其他):
     * 0：失败的描述
     */
     ReturnResult infraIdentity698(String keyType, String meterAddress, in MeterAuthorityInfo infraAuth, in MeterAuthorityInfo idAuth ,int mode,boolean checkDar);

    /**
     * 698安全传输读取报文(针对读取当前数据)
     *
     * @param meterAddress 表地址
     * @param taskData 要发送的数据
     * @param safeType 安全类型
     * @param mode         通讯方式：0 红外  1 串口(485线)
     * @return ReturnResult  :int code  0 成功  其他失败
     * :List<String> datas（code==0）:   size==0
     * 0:linkUserData 链路数据域
     * :List<String> datas(code==其他):
     * 0：失败的描述
     */
    ReturnResult sendReadData698(String meterAddress, String taskData,String safeType,int mode,boolean checkDar);

      /**
      * 698安全传输记录型报文(返回数据帧，由子应用根据功能独自解析)
      *
      * @param meterAddress 表地址
      * @param taskData 要发送的数据
      * @param safeType 安全类型
      * @param mode         通讯方式：0 红外  1 串口(485线)
      * @return ReturnResult  :int code  0 成功  其他失败
      * :List<String> datas（code==0）:   size==0
      * 0:linkUserData 链路数据域
      * :List<String> datas(code==其他):
      * 0：失败的描述
      */
     ReturnResult sendRecordData698ForFrameData(String meterAddress, String taskData,String safeType,int mode,boolean checkDar);
       /**
         * 打开红外或串口
         *
         * @param mode    通信方式 0 默认普通红外 1串口 2普通红外 3 激光红外
         * @return 0成功 其他失败
         */
       ReturnResult onInfraInit(int mode);
     /**
     * 关闭红外或串口
     *
     * @param mode    通信方式 0 默认普通红外 1串口 2普通红外 3 激光红外
     * @return 0成功 其他失败
     */
   ReturnResult onInfraDeInit(int mode);
   /**
     * 设置通信超时时间，如何串口已经打开，则改变为关闭状态，需要重新打开后生效
     *
     * @param sendTimeOut    发送超时时间 毫秒
     * @param receiveTimeOut 接收超时时间 毫秒
     */
      void setInfraTimeOut(int sendTimeOut, int receiveTimeOut) ;

      /**
       * 698明文读取终端参数(针对读读取终端参数)
       *
       * @param tmnlAddress 表地址
       * @param taskData     要发送的数据
       * @param mode         通讯方式：0 红外  1 串口(485线)
       * @param checkDar     是否对698协议返回的dar标志进行判断（true： 判断，false：不判断）
       * @return ReturnResult  :int code  0 成功  其他失败
       * :List<String> datas（code==0）:   size==0
       * 0:linkUserData 链路数据域
       * :List<String> datas(code==其他):
       * 0：失败的描述
       */
       ReturnResult sendPlainReadData698(String tmnlAddress, String taskData, int mode, boolean checkDar);

          /**
             * 698电表建立连接（秘钥协商） 设参分帧
             *
             * @param meterAddress 表地址
             * @param taskData 要发送的数据
             * @param safeType 安全类型
             * @param mode         通讯方式：0 红外  1 串口(485线)
             * @return ReturnResult  :int code  0 成功  其他失败
             * :List<String> datas（code==0）:   size==0
             * 0:linkUserData 链路数据域
             * :List<String> datas(code==其他):
             * 0：失败的描述
             */
            ReturnResult sendData698Fz(String meterAddress, String taskData,String safeType,int mode,boolean checkDar);
}
